//模板参数必须显示指定！
#ifndef MKAHYPAR_MANDATORY_H
#define MKAHYPAR_MANDATORY_H
#include <type_traits>
namespace mkahypar {
  namespace meta {
    struct unspecified_type;

    template <typename SomeType>
    class MandatoryTemplateArgument {
      struct private_type;

      static_assert(std::is_same<SomeType, private_type>::value,
                    "You forgot to specify a mandatory template argument which cannot be deduced.");
    };
  }  // namespace meta
}  // namespace mkahypar

//确保模板参数必须显示指定，而不能通过编译器推导，否则除非静态断言报错
using Mandatory = mkahypar::meta::MandatoryTemplateArgument<mkahypar::meta::unspecified_type>;

template <typename T>
using MandatoryTemplate = mkahypar::meta::MandatoryTemplateArgument<T>;
#endif //MKAHYPAR_MANDATORY_H
